/**
 * 事务内基于卡片模型更新数据
 *
 * 输入参数:
 *   D:    可选,     对象数组,        CardD参数的数组
 *   W:    可选,     对象数组,        CardW参数的数组
 *
 * 输出参数:
 *   true表示事务成功
 *
 *   Created by wbx on 2022/5/7
 */
(function ({ UID, D = [], W = [] }, headers) {
  // 验证用户
  if (!UID) throw Error("未授权的访问");

  let conn_name;

  // 检测是否使用相同连接
  [...D, ...W].forEach(({ Card }) => {
    var v_card = A.card[Card];
    conn_name ??= v_card.连接名称;
    if (conn_name != v_card.连接名称) throw Error("无法启动事务:请确保操作的卡片使用同一个连接");
  });

  // 事务中完成处理
  A.db.trans(conn_name, () => {
    D.forEach(d => A.job.CardD({ ...d, UID }, headers));
    W.forEach(w => A.job.CardW({ ...w, UID }, headers));
  });

  return true;
})